package com.coderman.infosys.auth.domain.bo.authority;


import lombok.Data;
import lombok.ToString;

import java.util.List;
import java.util.Map;

/**
* @Description:行政权限类
* @Author:shenshuai
* @CreateTime:2022-01-02 15:27:38
* @version v1.0
*/
@Data
@ToString
public class AdminAuthorityBO  extends  AuthorityBO{

   //由于这里在模型上抹去了名称信息，所以在构建的Authority聚合根的时候可能需要工厂方式在facade层面构建完整的数据对象
   //或者在BO层面冗余名称字段，或者在领域层实现逻辑上调用下游接口补充完整的名称信息

   public AdminAuthorityBO(){}
   public AdminAuthorityBO(String authCode){
      this.authCode = authCode;
   }


   /** 权限编码标示 **/
   private String authCode;

   /** 组织部门 **/
   private Long departmentId;


   /** 城市 *
    * 第一版本对于权限来说只突出了一个城市的概念
    * 但是这里跟第二版本的addressMap又不太一样
    * */
   private Long cityId;


   /** 城市
    * 这里也可以按树形结构来构建
    *
    *
    * 对于树形建模的方式可能仍然有问题
    * 需要突出地址权限的概念，也就是相当于需要打散
    *
    * 所以我们终究需要表达这个行政权限里面的城市资源类型是一个地址类型
    * 但是由于在国内我们一般用省，市，县来表达，所以这个参数仍然不够稳定
    * 可能更好的方式是我们得到的是一个省-市-县的编码比如001-002-003这样的编码会对象会更好一点
    * 所以这里犯了一个错误就是让数据结构影响了建模的稳定性和合理性
    *
    * 正是因为这一点还有对象关系引用深度的问题，所以最好用简单的数据类型来表达领域模型，这样的话领域模型才不会被干扰
    *
    * 值对象？？？
    *
    *
    * **/
   private Map<String,Map<String, List<String>>> addressMap;

   /** 职位 **/
   private Long jobId;


   public static AdminAuthorityBO ofIdentifer(String authCode){
       return new AdminAuthorityBO(authCode);
   }




}